今天終於來到SQL的進階篇!想要更加靈活的使用SQL,就必須要知道子查詢的用法,今天就讓我們來認識所謂的子查詢吧~
子查詢的意思其實就是在原本的查詢語句裡面再放上一個查詢語句,被放入的語句會使用()
,用以區別outer query 和 inner query(subquery),而()
內的就是子查詢。
子查詢可以在 SELECT
、INSERT
、UPDATE
和 DELETE
語句中,同 =、<、>、>=、<=、IN
等運算符一起使用。
由於我們都會是以查詢資料為主,因此今天就讓我們來學習以SELECT
為主的子查詢用法。
第一個常用的方法是結合資料的條件篩選。
當我們想要抓出某欄位大於均值的資料時可以這樣寫:
SELECT 欄位名1, 欄位名2, 欄位名3
FROM 表名
WHERE 欄位名2 > (SELECT AVG(欄位名2)
FROM 表名);
還有一種用法可以來查詢兩表之間的條件篩選:
SELECT 欄位名1, 欄位名2, 欄位名3
FROM 表1
WHERE 欄位名2 IN (SELECT DISTINCT 欄位名2
FROM 表2);
這邊有一個新的用法DISTINCT
,其用意是去重,讓我們可以確保每一個資料的不重複。
除了可以放在條件篩選外,我們還可以在FROM
中建立一個臨時表來做查詢,該怎麼做呢?
將查詢的結果作為另一個表的查詢來源,當我們想要預先篩選某些資料時很常用到此方法。
SELECT 欄位名1, 欄位名2, 欄位名3
FROM (SELECT 欄位名1, 欄位名2, 欄位名3
FROM 表名
WHERE 條件 );
同時也可以套入剛剛學到與WHERE
一起使用的子查詢:
SELECT 欄位名1, 欄位名2, 欄位名3
FROM (SELECT 欄位名1, 欄位名2, 欄位名3
FROM 表名
WHERE 條件 )
WHERE 欄位名2 > (SELECT AVG(欄位名2)
FROM 表名);
哇~越寫越長!是不是越來越有成就感了?(笑)
最後,子查詢也一樣可以放在SELECT裡面,並傳回單值,我們來看看用法~
SELECT 欄位名1, 欄位名2, 欄位名3,(SELECT (欄位名2/欄位名3) AS A
FROM 表名
WHERE A > 10)
FROM 表名;
這邊與大家介紹簡單和常用的3種,希望大家可以有一個初步的認識,如果想要知道更深入的用法可以參考下方的連結!
接下來我們就會進入的Python的學習,要開始寫code啦!
既期待又緊張的燒腦環節,希望可以用輕鬆有趣的方式簡單帶大家回顧Python的基礎用法~
參考資料:
https://sdwh.dev/posts/2021/02/SQL-Server-SubQuery/
https://chriskang028.medium.com/深入淺出-sql-的子查詢-subquery-各項常用技巧-8887731717f3
https://www.mis.nsysu.edu.tw/db-book/PDF/Ch7.pdf
https://www.itread01.com/content/1562603163.html